Code Folding
   HOME

TheInfoList



OR:

Code or text folding, or less commonly holophrasting, is a feature of some graphical user interfaces that allows the user to selectively hide ("fold") or display ("unfold") parts of a document. This allows the user to manage large amounts of text while viewing only those subsections that are currently of interest. It is typically used with documents which have a natural tree structure consisting of nested elements. Other names for these features include expand and collapse, code hiding, and outlining. In Microsoft Word, the feature is called "collapsible outlining". Many user interfaces provide disclosure widgets for code folding in a sidebar, indicated for example by a triangle that points sideways (if collapsed) or down (if expanded), or by a /code> box for collapsible (expanded) text, and a /code> box for expandable (collapsed) text. Code folding is found in text editors, source code editors, and IDEs. The folding structure typically follows the syntax tree of the program defined by the computer language. It may also be defined by levels of indentation, or be specified explicitly using an in-band marker (saved as part of the source code) or out-of-band. Text folding is a similar feature used on ordinary text, where the nested elements consist of paragraphs, sections, or outline levels. Programs offering this include folding editors, outliners, and some word processors. Data folding is found in some hex editors and is used to structure a binary file or hide inaccessible data sections. Folding is also frequently used in data comparison, to select one version or another, or only the differences.


History

The earliest known example of code folding in an editor is in NLS (computer system). Probably the first widely available folding editor was the 1974 Structured Programming Facility (SPF) editor for IBM 370 mainframes, which could hide lines based on their indentation. It displayed on character-mapped 3270 terminals. It was very useful for prolix languages like
COBOL COBOL (; an acronym for "common business-oriented language") is a compiled English-like computer programming language designed for business use. It is an imperative, procedural and, since 2002, object-oriented language. COBOL is primarily us ...
. It evolved into the Interactive System Productivity Facility ( ISPF).


Use

Code folding has various use patterns, primarily organizing code or hiding less useful information so one can focus on more important information. Common patterns follow.


Outlining

Most basically, applications use code folding to outline source code, collapsing each block to a single line. This can be only top-level blocks like functions and classes, nested blocks like nested functions and methods, or all blocks, notably control-flow blocks. This allows one to get an overview of code, easily navigating and rearranging it, and to drill down into more detail as needed, without being distracted by other code. Viewing-wise, this allows one to quickly see a list of all functions (without their bodies), while navigation-wise this replaces extensive paging past long functions – or searching for the target – with going directly to the next function.


Hiding boilerplate code

Some languages or libraries require extensive
boilerplate code In computer programming, boilerplate code, or simply boilerplate, are sections of code that are repeated in multiple places with little to no variation. When using languages that are considered ''verbose'', the programmer must write a lot of boile ...
. This results in extremely long code, which can obscure the main point. Further, substantive code can be lost in the boilerplate. For example, in Java a single private field with a getter and setter requires at least 3 lines, if each is on a separate line: private String name = null; public String getName() public void setName(String name) This expands to 10 lines with conventional function line breaks and spacing between functions (including trailing newline): private String name = null; public String getName() public void setName(String name) Documentation with Javadoc expands this to 20 lines: /** * Property name readable/writable. */ private String name = null; /** * Getter for property name */ public String getName() /** * Setter for property name. * @param name */ public void setName(String name) If there are many such fields, the result can easily be hundreds of lines of code with very little "interesting" content – code folding can reduce this to a single line per field, or even to a single line for all fields. Further, if all routine fields are folded, but non-routine fields (where getter or setter is not just returning or assigning a private field) are not folded, it becomes easier to see the substantive code.


Collapsing metadata

Metadata can be lengthy, and is generally less important than the data it is describing. Collapsing metadata allows one to primarily focus on the data, not the metadata. For example, a long list of attributes in C# may be manually collapsed as follows: #region Attributes rowsable(false) ergableProperty(false) efaultValue(null) ersistenceMode(PersistenceMode.InnerProperty) emplateContainer(typeof(MyType)) emplateInstance(TemplateInstance.Single) #endregion public ITemplate ContentTemplate The resulting code displays as: Attributes public ITemplate ContentTemplate


Collapsing comments

Comments are a form of human-readable metadata, and lengthy comments can disrupt the flow of code. This can be the case either for a long comment for a short section of code, such as a paragraph to explain one line, or comments for documentation generators, such as Javadoc o
XML Documentation
Code folding allows one to have long comments, but to display them only when required. In cases where a long comment has a single summary line, such as Python docstrings, the summary can still be displayed when the section is collapsed, allowing a summary/detailed view.


Showing structure or sandwich code in structured programming

Structured programming Structured programming is a programming paradigm aimed at improving the clarity, quality, and development time of a computer program by making extensive use of the structured control flow constructs of selection ( if/then/else) and repetition ( ...
consists of nested blocks of code, and long blocks of code – such as long switch statements – can obscure the overall structure. Code folding allows one to see the overall structure and expand to a specific level. Further, in some uses, particularly strict structured programming (single function exit), there are code patterns that are hard to see when looking at expanded code. For example, in resource management in structured programming, one generally acquires a resource, followed by a block of code using the resource, and finishing with releasing the resource. The acquisition/release pairing is hard to see if there is a long block of code in between, but easy to see if the intervening block is folded. Similarly, in conditional code like if...then...else, secondary blocks may be far from the condition statement.


Grouping code

Fold groups can be used to group code, either by explicit grouping – similar to comment blocks separating a module into sections, or class members into associated groups – or implicitly, such as by automatically grouping class members by access level.


Hiding legacy code

Legacy code – or any code that a developer does not wish to view or change at a given point in time – can be folded away so that programmers can concentrate on the code under consideration.


Hiding in-source data tables


Conventions

In order to support code folding, the text editor must provide a mechanism for identifying "folding points" within a text file. Some text editors provide this mechanism automatically, while others provide defaults that can either be overridden or augmented by the user. There are various mechanisms, coarsely divided as automatic and manual – do they require any specification by the programmer? Folding points are usually determined with one or more of the following mechanisms. Each of these has its own distinct advantages and difficulties, and it is essentially up to the developers who create the text editor software to decide which to implement. Text editors that provide support for multiple folding mechanisms typically allow the user to choose which is most appropriate for the file being edited.


Syntax-dependent

Syntax-dependent folding points are those that rely on the content of the file being edited in order to specify where specific folding regions should begin and end. Syntax-based folding points are typically defined around any or all of the standard sub-features of the
markup language Markup language refers to a text-encoding system consisting of a set of symbols inserted in a text document to control its structure, formatting, or the relationship between its parts. Markup is often used to control the display of the document ...
or programming language in use. These are desirable due to being automatic and agreeing with code structure, but may require significant work to implement, and time to compute when editing a file.


Indentation-based

Indentation-based folding points are generally specified by the position and sequence of non-printing whitespace, such as tabs and spaces, within the text. This is most often used as a simple form of syntax-based folding, as indentation almost always reflects nesting level in indent styles for structured programming languages. This convention is particularly suitable to syntaxes that have an off-side rule, so the structure largely agrees with the indent. Examples include Python and text files that require indentation as a rule by themselves. However, even in these cases, structure does not exactly agree with indent, such as in
line continuation This comparison of programming languages compares the features of language syntax (format) for over 50 computer programming languages. Expressions Programming language expressions can be broadly classified into four syntax structures: ;pre ...
, and thus syntax-dependent folding is preferred.


Token-based

Token-based folding points are specified using special
delimiter A delimiter is a sequence of one or more characters for specifying the boundary between separate, independent regions in plain text, mathematical expressions or other data streams. An example of a delimiter is the comma character, which acts a ...
s that serve no other purpose in the text than to identify the boundaries of folding points. This convention can be compared to indentation-based folding points, where printable characters are used instead of whitespace. The most common delimiter tokens are to end it. Another notable token is #region
/code>
C# directives
, respectively #Region
/code>
Visual Basic directives
, used in
Microsoft Visual Studio Visual Studio is an integrated development environment (IDE) from Microsoft. It is used to develop computer programs including websites, web apps, web services and mobile apps. Visual Studio uses Microsoft software development platforms such a ...
Code Editor. These are treated syntactically as compiler directives, though they do not affect compilation. As a manual method, token-based folding allows discretion in grouping code based on arbitrary criteria, such as "functions related to a given task", which cannot be inferred from syntactic analysis. Token-based folding requires in-band signalling, with folding tokens essentially being structured comments, and unlike other methods, are present in the source code and visible to other programmers. This allows them to be shared, but also requires their use (or preservation) by all programmers working on a particular file, and can cause friction and maintenance burden.


User-specified

User-specified folding allows the user to fold sections of text using a generic selection method, but without changing the source code (out-of-band), instead being specified only in the editor. For example, a programmer may select some lines of text and specify that they should be folded. Folded text might be anonymous or named, and this may be preserved across editing sessions or discarded. Unlike token-based folding, this does not change the source text – it thus is not shared with other editors of the file, and is not visible in the code.


Examples

The following document contains folding tokens ():

 Heading 1
 

 Heading 2
 

 Heading 3
 
When loaded into a folding editor, the outline structure will be shown:

 Heading 1
 {{{ ...

 Heading 2
 {{{ ...

 Heading 3
 {{{ ...
Usually clicking on the {{{ marks makes the appropriate body text appear.


Software with code folding capability

One of the earliest folding editors was STET, an editor written for the VM/CMS operating system in 1977 by
Mike Cowlishaw Mike Cowlishaw is a visiting professor at the Department of Computer Science at the University of Warwick, and a Fellow of the Royal Academy of Engineering. He is a retired IBM Fellow, and was a Fellow of the Institute of Engineering and Technol ...
. STET is a text editor (for documentation, programs, etc.) which folds files on the basis of blocks of lines; any block of lines can be folded and replaced by a name line (which in turn can be part of a block which itself can then be folded). A folding editor appeared in the occam IDE ''circa'' 1983, which was called the Inmos Transputer Development System (TDS),. The "f" editor (in list below) probably is the most intact legacy from this work. The Macintosh computer historically had a number of source code editors that "folded" portions of code via " disclosure triangles". The UserLand Software product Frontier is a scripting environment that has this capability. Folding is provided by many modern text editors, and syntax-based or semantics-based folding is now a component of many software development environments. Editors include: {, class="wikitable sortable" style="text-align: center; width: auto; table-layout: fixed;" , - ! style="width: 12em" , Name ! Token ! Indentation ! Syntax ! User , - , ABAP Editor , {{yes , {{dunno , {{yes , {{dunno , - , AkelPad , {{dunno , {{dunno , {{yes , {{dunno , - , Anjuta IDE , {{dunno , {{yes , {{yes , {{dunno , - , Atom{{efn, http://flight-manual.atom.io/using-atom/sections/folding/ , {{dunno , {{yes , {{dunno , {{yes , - , BBEdit , {{dunno , {{dunno , {{Yes , {{dunno , - , Brackets , {{yes2Plug-in , {{yes , {{yes , {{no , - , Codeanywhere , {{yes , {{yes , {{yes , {{dunno , - , Codenvy , {{yes , {{yes , {{yes , {{dunno , - , Code::Blocks IDE , {{Yes , {{Yes , {{Yes , {{Yes , - , Cubic IDE , {{Yes , {{Yes , {{Yes , {{Yes , - , CudaText , {{dunno , {{dunno , {{dunno , {{dunno , - , Delphi IDE , {{Yes , {{dunno , {{Yes , {{dunno , - ,
Dreamweaver Adobe Dreamweaver is a proprietary web development tool from Adobe Inc. It was created by Macromedia in 1997 and developed by them until Macromedia was acquired by Adobe Systems in 2005. Adobe Dreamweaver is available for the macOS and Wind ...
, {{dunno , {{dunno , {{dunno , {{yes , - ,
Eclipse An eclipse is an astronomical event that occurs when an astronomical object or spacecraft is temporarily obscured, by passing into the shadow of another body or by having another body pass between it and the viewer. This alignment of three ce ...
, {{dunno , {{dunno , {{yes , {{dunno , - , EditPlus , {{no , {{yes , {{no , {{no , - ,
Emacs Emacs , originally named EMACS (an acronym for "Editor MACroS"), is a family of text editors that are characterized by their extensibility. The manual for the most widely used variant, GNU Emacs, describes it as "the extensible, customizable, s ...
, {{yes{{efn, Token-based folding is implemented by th
''folding'' minor mode
One can also use

' and
allout
' minor modes for sectioning program sources. , {{dunno{{efn, One can use the set-selective-display function in Emacs to hide lines based on the indentation level, as suggested in th
Universal code folding
note. , {{yes{{efn, 1=Syntax-dependent folding is supported by the

' and
allout
' modes for special dedicated outline-syntaxes; by the
hideshow
' minor mode for some programming languages; also, by the
semantic-tag-folding
' minor mode and the senator-fold-tag
/code> command fo
syntaxes supported by ''semantic'' (a component of CEDET)
as well as by
doc-mode
' for JavaDoc or Doxygen comments, by
TeX-fold-mode
',
/code> command,
nxml-outln
' library in the corresponding language-specific modes, and possibly in other modes for particular syntaxes. Sometimes, the standard simple ''outline'' minor mode is used to simulate syntax-based folding, cf. th
use
of it in properly indented Emacs Lisp source code, th
use of it (see near the end of the page)
for properly indented HTML. Several folding mechanisms are unified by the
fold-dwim
' interface. See als
CategoryHideStuff
, {{yes{{efn, Folding of user-selected regions in Emacs is implemented by the hide-region-hide
/code> command. , - , EmEditor Professional , {{dunno , {{yes , {{yes , {{dunno , - , FlashDevelop IDE , {{dunno , {{dunno , {{yes , {{dunno , - , geany , {{dunno , {{yes , {{yes , {{dunno , - , gedit , {{yes , {{yes , {{yes , {{dunno , - , ISPF , {{dunno , {{Yes , {{dunno , {{Yes , - , JED , {{yes , {{yes{{efn, The set_selective_display function may be used to hide lines indented beyond a specified amount. , {{dunno , {{no , - , jEdit , {{yes , {{yes , {{yes , {{yes , - , Kate , {{yes , {{yes , {{yes , {{yes , - , MATLAB , {{no , {{no , {{yes , {{no , - , MS Visual Studio , {{yes , {{yes , {{yes , {{yes , - , NetBeans IDE , {{yes , {{yes , {{yes , {{yes , - ,
Notepad++ Notepad++ is a text and source code editor for use with Microsoft Windows. It supports tabbed editing, which allows working with multiple open files in a single window. The product's name comes from the C postfix increment operator. Notepad++ ...
, {{dunno , {{yes , {{yes , {{yes , - , NuSphere PHPEd , {{dunno , {{dunno , {{Yes , {{Yes , - , Qt Creator , {{dunno , {{dunno , {{Yes , {{dunno , - , SciTE , {{yes , {{yes , {{yes , {{dunno , - , STET{{efn, STET may have been the first text editor that supported folding{{Citation needed, date=January 2008 , {{dunno , {{dunno , {{dunno , {{dunno , - , TextMate , {{yes , {{yes , {{yes , {{yes , - , UltraEdit , {{no , {{no , {{yes , {{Yes , - ,
Vim Vim means enthusiasm and vigor. It may also refer to: * Vim (cleaning product) * Vim Comedy Company, a movie studio * Vim Records * Vimentin, a protein * "Vim", a song by Machine Head on the album ''Through the Ashes of Empires'' * Vim (text ed ...
, {{yes , {{yes , {{yes , {{yes , - ,
Visual Expert Visual Expert is a static code analysis tool, extracting design and technical information from software source code by reverse-engineering, used by programmers for software maintenance, modernization or optimization. It is designed to parse seve ...
, {{dunno , {{dunno , {{yes , {{dunno , - , Visual Studio Code , {{yes , {{yes , {{yes , {{no , - , Xcode , {{yes , {{yes , {{yes , {{yes , - , Zend Studio , {{dunno , {{dunno , {{dunno , {{dunno


Other editors

{{div col, colwidth=22em * aoeui, the Dvorak-optimized editor * Author-it enterprise authoring and component content management software * Bluefish * f (alias xf, Winf, Winf32) * Folding Text Editor * GFA BASIC * GridinSoft Notepad * IntelliJ IDEA (and other JetBrains' IDE) *
Keynote A keynote in public speaking is a talk that establishes a main underlying theme. In corporate or commercial settings, greater importance is attached to the delivery of a keynote speech or keynote address. The keynote establishes the framework fo ...
* Komodo Edit * Kwrite *
Leo Leo or Léo may refer to: Acronyms * Law enforcement officer * Law enforcement organisation * ''Louisville Eccentric Observer'', a free weekly newspaper in Louisville, Kentucky * Michigan Department of Labor and Economic Opportunity Arts an ...
* LEXX/LPEX (editor for the OED)LEXX – A programmable structured editor ''IBM Journal of Research and Development'', Vol 31, No. 1, 1987, IBM Reprint order number G322-0151 * MonoDevelop * NoteTab Pro * Padre * RJ Text Editor * Smultron * The Hessling Editor * Visual Studio * WinShell (since version 3.30) * XEDIT (however its folding is effected by scripts) * Zeus {{div col end


See also

*The Programming features section of the Comparison of text editors article for more editors that support folding *
Accordion (GUI) The accordion is a graphical control element comprising a vertically stacked list of items, such as labels or thumbnails. Each item can be "expanded" or "collapsed" to reveal the content associated with that item. There can be zero expanded item ...
, a similar UI technique applied to hierarchical lists rather than text


Notes

{{notelist


References

{{reflist {{refbegin * {{cite web, url=http://www.codinghorror.com/blog/2008/07/the-problem-with-code-folding.html , title=The Problem With Code Folding , first=Jeff , last=Atwood , authorlink=Jeff Atwood , work=Coding Horror , date=6 Jul 2008, postscript= – criticism of code folding, detailed comments on use. {{refend


External links

{{Commons category
What is a folding editor?
by the author of the fe
/code> editor.
Description of the folding editor
used in occam. {{DEFAULTSORT:Code Folding Source code Text editor features Articles with example C Sharp code